﻿using System;
using br.com.SistemaChamados.Constants;
using br.com.SistemaChamados.Controller;
using br.com.SistemaChamados.Enum;
using br.com.SistemaChamados.Model;
using System.Web.Security;
using br.com.SistemaChamados.Controller.Common;
using br.com.SistemaChamados.Util;
using System.Web.UI.WebControls;

public partial class Pages_CallCategoryUpdate : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        ViewStateUserKey = Session.SessionID;
    }

    protected void Page_PreInit(object sender, EventArgs e)
    {
        br.com.SistemaChamados.Model.Common.User loggedUser = new br.com.SistemaChamados.Model.Common.User();
        UserController userController = new UserController();
        if (Session[UserConstants.SESSION_USER_LOGGED_IN] != null)
        {
            loggedUser.Id = Convert.ToInt32(Session[UserConstants.SESSION_USER_LOGGED_IN]);
            loggedUser = userController.GetUser(loggedUser);
            this.MasterPageFile = MasterPageDefiner.defineMasterPageByAccessRole(loggedUser.Profile);
            ((Label)Master.FindControl("lblUser")).Text = loggedUser.Name;
            this.Title = "SysCall - Sistema de chamados [logado como " + loggedUser.Name + "]";
        }
        else
        {
            Response.Redirect("~/Pages/Login/Login.aspx");
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (User.IsInRole("ADMIN"))
        {
            if (!IsPostBack)
            {
                string id = Session[CallCategoryConstants.SESSION_CALLCATEGORY_ID].ToString();
                CallCategory callCategory = new CallCategory();
                callCategory.Id = Convert.ToInt32(id);
                CallCategoryController Controller = new CallCategoryController();
                CallCategory returnedCallCategory = new CallCategory();
                try
                {
                    returnedCallCategory = Controller.GetCallCategory(callCategory);
                    if (returnedCallCategory != null)
                    {
                        txbDescription.Text = returnedCallCategory.Description;
                        txbMinimumTimeAnalize.Text = Convert.ToString(returnedCallCategory.MinTimeAnalize);
                        txbMaximumTimeAnalize.Text = Convert.ToString(returnedCallCategory.MaxTimeAnalize);
                        txbMaximumTimeTreatment.Text = Convert.ToString(returnedCallCategory.MaxTimeTreatment);
                        txbMinimumTimeTreatment.Text = Convert.ToString(returnedCallCategory.MinTimeTreatment);
                    }
                }
                catch (Exception ex)
                {
                    Response.Write(@"<script language='javascript'>alert('Ocorreu um erro na carga da tela: <br>" + ex.Message +
                                       ".');</script>");
                }
            }
        }
        else
        {
            FormsAuthentication.SignOut();
            Response.Clear();
            Response.Redirect("~/Pages/Login/Login.aspx");
        }
    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        CallCategory callCategory = new CallCategory();
        CallCategoryController Controller = new CallCategoryController();
        try
        {
            EnumCRUDState resultOperation = Controller.UpdateCallCategory(populateObject(callCategory));
            if (resultOperation == EnumCRUDState.SQL_SUCCESS)
            {
                Response.Write(@"<script language='javascript'>alert('Categoria de chamado alterada com sucesso!');</script>");
                ClearFields();
            }
            else
            {
                Response.Write(@"<script language='javascript'>alert('Ocorreu um erro durante a correção, por favor tente novamente!');</script>");
            }
        }
        catch (Exception ex)
        {
            Response.Write(@"<script language='javascript'>alert('Ocorreu um erro na correção: <br>" + ex.Message +
                               ".');</script>");
            callCategory = null;
        }
        finally
        {
            Session.Remove(CallCategoryConstants.SESSION_CALLCATEGORY_ID);
            Response.Redirect("CallCategoryMain.aspx");
        }
    }

    public void ClearFields()
    {
        txbDescription.Text = "";
        txbMaximumTimeAnalize.Text = "";
        txbMaximumTimeTreatment.Text = "";
        txbMinimumTimeAnalize.Text = "";
        txbMinimumTimeTreatment.Text = "";
        txbDescription.Focus();
    }

    public CallCategory populateObject(CallCategory callCategory)
    {
        string id = Session[CallCategoryConstants.SESSION_CALLCATEGORY_ID].ToString();
        callCategory.Id = Convert.ToInt32(id);
        callCategory.Description = txbDescription.Text;
        callCategory.MinTimeAnalize = Convert.ToDouble(txbMinimumTimeAnalize.Text);
        callCategory.MaxTimeAnalize = Convert.ToDouble(txbMaximumTimeAnalize.Text);
        callCategory.MaxTimeTreatment = Convert.ToDouble(txbMaximumTimeTreatment.Text);
        callCategory.MinTimeTreatment = Convert.ToDouble(txbMinimumTimeTreatment.Text);
        return callCategory;
    }

}